用python爬取肯德基早餐,并进行数据分析来搭配营养早餐
The following article is from 木下学Python Author 木下瞳
大家好,我是朱小五
「凹凸数据」读者交流①群的“木下瞳”同学最近分析了肯德基的早餐,小五觉得角度还挺有趣,就重新排版整理分享给大家。
公众号后台回复「进群」,欢迎加入读者交流群~
00 前言
肯德基发展了那么多年,他们的食物也随之发生了很多变化,记得以前刚出早餐的时候,也就几个品种,有点单一,然而现在的花样是越来越多,套餐五花八门,各种搭配。
木下爬取了肯德基早餐的菜单,来看看 KFC 的早餐热量,碳水化合物,脂肪,蛋白质是什么水平的,搭配出属于我们自己的套餐吧~~~
01 爬虫
我们先打开肯德基宅急送的网上订餐首页
https://www.4008823823.com.cn/kfcios/Html/Croissant.html
可以看到各种我们想要的信息
我们要爬取的信息有餐名,内容,价格,图片链接,我们查看源代码,发现网页是静态的:
我们可以使用正则表达式直接进行提取我们需要的数据:
def get_info(response):
# 提取早餐信息
# 餐名
titles = re.findall('alt="(.*?)"',response.text,re.S)
# 食物内容
foods = re.findall('descCn="(.*?)"',response.text,re.S)
# 价格
prices = re.findall('price="(.*?)"',response.text,re.S)
# 图片链接
img_urls = re.findall('<img src="(.*?)"',response.text,re.S)
infos = zip(titles,foods,prices,img_urls)
return list(infos)
提取出我们的数据后,我们选择使用 csv 进行保存,保存结果如下:
完整爬虫代码,见文末获取。
02 早餐词云
我们来看一看 KFC 的早餐主要都有什么内容:
#词云生成
mask = imageio.imread("foodName.jpg")
w = wordcloud.WordCloud(background_color = 'white',
width = 1000,height = 700,
font_path = 'msyh.ttc',
mask = mask)
w.generate(txt)
w.to_file('wordcloud.png')
我们可以看到主食主要有汉堡,鸡肉,皮蛋瘦肉粥等;小吃有鸡蛋,红薯饼,芝士等;饮品类的主要就是咖啡豆浆等;而且还分西式与法式的种类。
让我们从主食,小吃,饮品的角度看一看它们的营养吧。
关于热量,脂肪,碳水化合物,蛋白质小编是从一个食物热量的网站查询的,搜了搜肯德基的食品,虽说不能完全对应每件食品,但同种类食品的数值相差不大,含量(每100克)。
http://www.boohee.com
hamburger = {
'热量' : 250,
'脂肪' : 10,
'碳水化合物' : 20,
'蛋白质' : 10
}
我们查询并手动给食品赋值,这样在后续文章中就可以统计营养分布了。
03 主食营养分布
KFC 主食主要可以分为汉堡,饭团,鸡肉,粥这几大类,我们来看一看它们的营养数值分布情况吧:
x = ['汉堡','饭团','粥','鸡肉']
y1 = [250,200,50,255]
y2 = [10,11,1.5,15]
y3 = [20,21,8,10]
y4 = [10,6,2.5,21]
c = Bar()
c.add_xaxis(x)
c.add_yaxis("热量", y1, stack="stack1")
c.add_yaxis("脂肪", y2, stack="stack1")
c.add_yaxis("碳水化合物", y3, stack="stack1")
c.add_yaxis("蛋白质", y4, stack="stack1")
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
c.set_global_opts(title_opts=opts.TitleOpts(title="主食营养分布"))
#c.render_notebook()
c.render('主食营养分布.html')
我们看到 ,KFC 的早餐的热量都还是挺高的(每 100g),尤其是汉堡,饭团,鸡肉类的主食,要是天气较冷的话,选择这三类作为主食,或许是一个不错的选择呢。
04 小吃营养分布
从页面上看出的提供了这么几种小吃,大可分为茶叶蛋,油条,薯饼,蛋挞这几类,太阳蛋跟蛋挞差不多暂且算成蛋挞。
那让我们来看看小吃的营养分布是如何的吧(每 100g 的含量):
看起来是油条热量最高呢,小编觉得茶叶蛋不错,也挺好吃的,热量这些也相对较低,蛋白质的占比相对其他的也是最高的。
当然了,正在减肥,油条建议少吃。
05 饮品营养分布
当然了,早餐来一杯腾腾的咖啡或豆浆是多么的惬意啊,KFC 早餐也提供了咖啡豆浆供我们选择:
from pyecharts import options as opts
from pyecharts.charts import Pie
c = Pie()
c.add(
"",
[list(z) for z in zip(["热量", "脂肪",'碳水化合物','蛋白质'],
[31,2,1.5, 3])],
center=["20%", "50%"],
radius=[60, 80],
)
c.add(
"",
[list(z) for z in zip(["热量", "脂肪",'碳水化合物','蛋白质'],
[100,4,12, 4])],
center=["55%", "50%"],
radius=[60, 80],
)
c.set_global_opts(
title_opts=opts.TitleOpts(title="豆浆(左)咖啡(右)"),
legend_opts=opts.LegendOpts(
type_="scroll", pos_top="200%", pos_left="80%", orient="vertical"
),
)
c.render('豆浆咖啡.html')
在热量上都相差不多,但蛋白质的话,豆浆所含的蛋白质占比就相对较多,如果午饭时间吃的较晚的话,可以选择豆浆,蛋白质带来的饥饿感会相对较少。
06 小结
当然我们不太好找到一一对应每样食物的的营养,就只能找类似的,木下对比后,发现相差不大,就可以等价替换咯,所以数据有一定的误差,要是有更好的参考可以告诉小编噢。
本文以趣味为主,也欢迎大家一起发掘身边的数据,一起搞事情!
作者:木下瞳,公众号「木下学Python」
整理:朱小五,公众号「凹凸数据」
文中数据和完整爬虫、可视化代码
关注公众号「凹凸数据」后台回复“肯德基”即可获取
近期文章,点击图片即刻查看
后台回复「进群」,加入读者交流群~
昨日最多赞留言“月牙弯弯”+25积分;
最有价值留言“心扉”+50积分
点击「积分」,了解积分规则~五
今天金主爸爸要求8点发文,所以提前推送了
所以在原有的积分规则上,今天在本条或头条文章留言的同学统一 +10积分
朱小五